package com.dingwen.minsta.service;


import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * file service
 *
 * @author dingwen
 * 2021.05.25 17:28
 */
public interface FileService {
    /**
     * 创建存储桶
     *
     * @param bucketName bucket名称
     * @return boolean
     */
    boolean createBucket(String bucketName);


    /**
     * 删除存储桶
     *
     * @param bucketName bucket名称
     * @return boolean
     */
    boolean removeBucket(String bucketName);


    /**
     * 保存文件
     *
     * @param bucketName bucket名称
     * @param file       文件
     * @return {@link String}
     */
    String saveFile(String bucketName, File file);

    /**
     * 保存文件
     *
     * @param bucketName          bucket名称
     * @param file                文件
     * @param destinationFileName 目标文件的名字
     * @return {@link String}
     */
    String saveFile(String bucketName, File file, String destinationFileName);

    /**
     * 保存文件
     *
     * @param bucketName          bucket名称
     * @param inputStream         输入流
     * @param destinationFileName 目标文件的名字
     * @return {@link String}
     */
    String saveFile(String bucketName, InputStream inputStream, String destinationFileName);

    /**
     * 删除文件
     *
     * @param fileName 文件名称
     * @return boolean
     */
    boolean removeFile(String fileName);

    /**
     * 删除文件
     *
     * @param bucketName bucket名称
     * @param fileName   文件名称
     * @return boolean
     */
    boolean removeFile(String bucketName, String fileName);


    /**
     * 得到流
     *
     * @param fileName 文件名称
     * @return {@link InputStream}
     */
    InputStream getStream(String fileName);

    /**
     * 得到流
     *
     * @param bucketName bucket名称
     * @param fileName   文件名称
     * @return {@link InputStream}
     */
    InputStream getStream(String bucketName, String fileName);


    /**
     * 得到文件
     *
     * @param fileName 文件名称
     * @return {@link File}
     */
    File getFile(String fileName);

    /**
     * 得到文件
     *
     * @param fileName   文件名称
     * @param bucketName bucket名称
     * @return {@link File}
     */
    File getFile(String fileName, String bucketName);


    /**
     * 写(上传)
     *
     * @param fileName     文件名称
     * @param outputStream 输出流
     */
    void write(String fileName, OutputStream outputStream);

    /**
     * 写(上传)
     *
     * @param fileName     文件名称
     * @param bucketName   bucket名称
     * @param outputStream 输出流
     */
    void write(String fileName, String bucketName, OutputStream outputStream);

}
